package com.ecnu.system.mapper;

import com.ecnu.common.core.domain.model.LoginUser;
import com.ecnu.system.domain.Project;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ecnu.system.domain.dto.ProjectForMyDTO;
import com.ecnu.system.domain.dto.ProjectListDTO;
import com.ecnu.system.domain.dto.ProjectUserFalseDTO;
import com.ecnu.system.domain.vo.ProjectAllVO;
import com.ecnu.system.domain.vo.ProjectSearchVO;
import com.ecnu.system.domain.dto.ProjectSearchDTO;
import com.ecnu.system.domain.vo.ProjectByUserVO;
import com.ecnu.system.domain.vo.ProjectListVO;
import com.ecnu.system.domain.vo.ProjectPageVO;
import com.ecnu.system.domain.vo.projectForMyVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * ecnu_活动表 Mapper 接口
 * </p>
 *
 * @author zdn
 * @since 2025-03-19
 */
@Mapper
public interface ProjectMapper extends BaseMapper<Project> {
    /**
     * 根据活动类型查询活动
     *
     * @param name
     * @param listDTO
     * @param roleId
     * @return
     */
    List<ProjectListVO> selectListByType(@Param("dto") ProjectListDTO listDTO,
                                         @Param("user") LoginUser suer,
                                         @Param("roleId") Long roleId);

    /**
     * 查询所有活动
     * @param listDTO
     * @param name
     * @return
     */
    List<ProjectAllVO> allListByName(@Param("dto") ProjectListDTO listDTO, @Param("name") String name);

    List<projectForMyVO> selectForProject(@Param("dto")ProjectForMyDTO dto,@Param("userId") String userId);

    List<projectForMyVO> selectForProjectTeacher(@Param("dto")ProjectForMyDTO dto,@Param("userId") String userId);

    ProjectByUserVO getOne(@Param("dto")ProjectUserFalseDTO dto);

    /**
     * 查询最热实验（按参与人数排序）
     * @return 最热实验列表
     */
    List<ProjectPageVO> selectHotProjects();

    /**
     * 查询最新实验（按创建时间排序）
     * @return 最新实验列表
     */
    List<ProjectPageVO> selectLatestProjects();

    /**
     * 查询推荐实验（按优秀作品数量排序）
     * @return 推荐实验列表
     */
    List<ProjectPageVO> selectRecommendedProjects();

    /**
     * 综合搜索（project + incubation_project + sys_user）
     */
    List<ProjectSearchVO> searchProjects(@Param("dto") ProjectSearchDTO dto,
                                         @Param("user") LoginUser suer,
                                         @Param("roleId") Long roleId);
}
